@@ -1,5 +1,7 @@ |
||
| 1 | 1 |
module Agents |
| 2 | 2 |
class PushbulletAgent < Agent |
| 3 |
+ include FormConfigurable |
|
| 4 |
+ |
|
| 3 | 5 |
cannot_be_scheduled! |
| 4 | 6 |
cannot_create_events! |
| 5 | 7 |
|
@@ -48,10 +50,22 @@ module Agents |
||
| 48 | 50 |
} |
| 49 | 51 |
end |
| 50 | 52 |
|
| 53 |
+ form_configurable :api_key |
|
| 54 |
+ form_configurable :device_id |
|
| 55 |
+ form_configurable :type, type: :array, values: ['note', 'link', 'address'] |
|
| 56 |
+ form_configurable :title |
|
| 57 |
+ form_configurable :body, type: :text |
|
| 58 |
+ form_configurable :url |
|
| 59 |
+ form_configurable :name |
|
| 60 |
+ form_configurable :address |
|
| 61 |
+ |
|
| 51 | 62 |
def validate_options |
| 52 | 63 |
errors.add(:base, "you need to specify a pushbullet api_key") if options['api_key'].blank? |
| 53 | 64 |
errors.add(:base, "you need to specify a device_id") if options['device_id'].blank? |
| 54 | 65 |
errors.add(:base, "you need to specify a valid message type") if options['type'].blank? or not ['note', 'link', 'address'].include?(options['type']) |
| 66 |
+ TYPE_TO_ATTRIBUTES[options['type']].each do |attr| |
|
| 67 |
+ errors.add(:base, "you need to specify '#{attr.to_s}' for the type '#{options['type']}'") if options[attr].blank?
|
|
| 68 |
+ end |
|
| 55 | 69 |
end |
| 56 | 70 |
|
| 57 | 71 |
def working? |
@@ -69,8 +83,8 @@ module Agents |
||
| 69 | 83 |
def query_options(event) |
| 70 | 84 |
mo = interpolated(event) |
| 71 | 85 |
{
|
| 72 |
- :basic_auth => {username: mo[:api_key], password: ''},
|
|
| 73 |
- :body => {device_iden: mo[:device_id], type: mo[:type]}.merge(payload(mo))
|
|
| 86 |
+ basic_auth: {username: mo[:api_key], password: ''},
|
|
| 87 |
+ body: {device_iden: mo[:device_id], type: mo[:type]}.merge(payload(mo))
|
|
| 74 | 88 |
} |
| 75 | 89 |
end |
| 76 | 90 |
|
@@ -37,6 +37,12 @@ describe Agents::PushbulletAgent do |
||
| 37 | 37 |
@checker.options['device_id'] = nil |
| 38 | 38 |
expect(@checker).not_to be_valid |
| 39 | 39 |
end |
| 40 |
+ |
|
| 41 |
+ it "should require fields based on the type" do |
|
| 42 |
+ @checker.options['type'] = 'address' |
|
| 43 |
+ @checker.options['address'] = nil |
|
| 44 |
+ expect(@checker).not_to be_valid |
|
| 45 |
+ end |
|
| 40 | 46 |
end |
| 41 | 47 |
|
| 42 | 48 |
describe "helpers" do |